计算机网络(2)-应用层(part1)
介绍5层模型中的应用层,包括网络应用的基本结构,HTTP协议,Web服务等
网络应用的体系结构
客户机/服务器结构(Client-Service,C/S)

点对点结构(Peer-to-Peer,P2P)

没有永久在线的服务器,任意结点之间可以直接通讯,结点间歇性接入网络、可以改变IP地址,如BT服务。
优点:高度可伸缩
缺点:难于管理
混合结构
将上述两种结构混合使用,不同功能使用不同的结构。
网络应用进程通信
进程:主机上运行的程序
同一主机上的进程之间的通信由操作系统提供
不同主机上的进程之间进行通信需要通过消息交换
客户机进程:发起通信的进程
服务器进程:等待通信请求的进程
进程之间通信利用套接字(Socket)发送/接收消息,Socket是由操作系统提供的网络操作的API
进程寻址
寻址主机:IP地址
区分主机上的不同进程:端口号(Port number)
有一些固定的端口:
HTTP Service: 80
Mail Service: 25
进程的标识符: IP地址+端口号
应用层协议
网络应用需要遵循应用层协议。
公开协议:由RFC定义,运行互操作,如HTTP等
私有协议:多数P2P文件共享应用
应用层协议内容:
消息的类型:请求消息、响应消息
语法
语义
规则:如何时发送/响应消息
网络应用需求
数据丢失(data loss)/可靠性(reliability)
某些网络应用容忍一定数据丢失,如网络电话、视频服务
某些网络应用要求可靠的数据传输,如文件传输
时间(timing)/延迟(delay)
某些应用需要足够低的延迟,如网络电话、网络游戏
带宽(bandwidth)
某些应用有带宽要求,如网络视频
某些应用可以适应任何带宽,如下载、Email

Internet提供的传输服务
TCP服务
面向连接
可靠传输
流量控制
拥塞控制
不提供时间/延迟保障
不提供最小带宽保障
UDP服务
无连接
不可靠的数据传输
也不提供TCP中提到的其他保障

Web应用
World Wide Web: Tim Berners-Lee
通过URL寻址Web对象: Scheme:// host:port / path
HTTP协议
C/S结构,客户——浏览器,服务器——Web服务器
使用TCP传输协议
无状态协议:服务器不维护任何有关客户端过去所发送的请求的信息
HTTP连接
非持久性连接
每个TCP连接最多允许传输一个对象,HTTP1.0版本
服务器在发出响应消息后关闭TCP连接,如果客户端还有需要的信息,需要重新建立TCP连接。

总时间为两个RTT加上文件发送时间
问题:每个对象都需要两个RTT,资源浪费,浏览器会打开多个并行的TCP连接以节约时间,会给服务器端造成过大压力
持久性连接
每个TCP连接允许传输多个对象,HTTP1.1版本默认
服务器发送响应后,保持TCP连接的打开,后续的HTTP消息可以继续通过这个连接发送
无流水线的持久性连接:客户端收到前一个响应再发送新的请求,每个对象耗时一个RTT
有流水线机制的持久性连接:HTTP1.1的默认选项,客户端只要遇到一个引用对象就尽快发出请求,理想状况下,收到所有对象只需要1个RTT
HTTP消息格式
HTTP请求报文
ASCII编码
例子:


上传输入的方法:POST方法,在请求消息的实体主体中上传;URL方法,使用GET方法,输入消息通过URL字段上传
HTTP1.0:GET,POST,HEAD(请浏览器不要将请求的对象放入响应消息中)
HTTP1.1:GET,POST,HEAD,PUT,DELETE
HTTP响应消息


HTTP响应状态代码
200 OK
301 Moved Permanently
400 Bad Request
404 Not Found
505 HTTP Version Not Supported
Cookie技术
HTTP为无状态协议,但很多应用需要服务器掌握客户端的状态,如网上购物。
Cookie技术为某些网站为了辨别用户身份、进行session跟踪而存储在用户本地终端上的数据(通常加密)
Cookie组件:HTTP请求和响应消息的Cookie头部行、保存在客户端主机上的Cookie文件、Web服务器上的数据库

可以用于身份认证、购物车、推荐、Email等
问题:隐私
Web缓存/代理服务器(proxy server)技术
功能:在不访问服务器的前提下满足客户端的HTTP请求
优点:缩短客户请求的响应时间、减少机构/组织的流量开销、在大范围内实现有效的内容分发(CDN)

浏览器向缓存/代理服务器发送所有的HTTP请求,如果所请求的对象在缓存中,则返还缓存对象;否则,缓存服务器向原始服务器发送HTTP请求,获取对象,并把对象保存以及返回给客户端.
一般由ISP架设,即充当客户端,又充当服务器
条件性GET方法
目标:如何缓存有最新的版本,则不需要发送请求对象
缓存:在HTTP请求中声明所持有版本的日期

Original author: 马旭
Original link: https://bhmaxu.github.io/2020/01/28/计算机网络(2)-应用层 (part1)/
Copyright Notice: Please indicate the source of the reprint (must retain the author's signature and link)